from app import create_app, db
from app.models import User, Major, Student
from app import bcrypt
import os
import sys

# 创建应用实例
app = create_app()

# 使用应用上下文来初始化MySQL数据库
def init_database():
    with app.app_context():
        try:
            # 创建所有数据库表
            db.create_all()
            print('MySQL数据库表结构创建完成')
            
            # 检查是否已经有学生数据
            student_count = Student.query.count()
            print(f'学生表中有 {student_count} 条记录')
            
            # 检查专业数据
            major_count = Major.query.count()
            print(f'专业表中有 {major_count} 条记录')
            
            # 确保默认管理员账户存在
            if User.query.filter_by(username='admin').first() is None:
                hashed_password = bcrypt.generate_password_hash('admin123').decode('utf-8')
                admin = User(username='admin', email='admin@example.com', password=hashed_password, role='admin')
                db.session.add(admin)
                db.session.commit()
                print('默认管理员账户已创建: 用户名 admin, 密码 admin123')
            else:
                print('管理员账户已存在')
                
        except Exception as e:
            print(f'数据库初始化时出错: {e}')
            print('请检查MySQL数据库连接配置是否正确')
            sys.exit(1)

if __name__ == '__main__':
    # 在启动应用前初始化数据库
    init_database()
    print('\n启动学生管理系统...')
    app.run(debug=True)